package com.dxx.D201910312055.dxx;

import android.accessibilityservice.AccessibilityService;
import android.graphics.Bitmap;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.widget.TextView;
import android.widget.Toast;


import java.lang.reflect.Method;

import static java.lang.System.out;


public class AutoService extends AccessibilityService {

    private final String TAG = getClass().getName();

    public static AutoService mService;

    Class mAutoClass;
    Object mAutoObj;

    //初始化
    @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        Toast.makeText(this, "锁定中...", Toast.LENGTH_SHORT).show();

        mService = this;


    }

    //实现脚本运行
    @Override
    public void onAccessibilityEvent(final AccessibilityEvent event) {


//        ,但是如果当前线程事件没走完，只能等待。事件是单线程队列方式的


//        Toast.makeText(this, "功能执行中.", Toast.LENGTH_SHORT).show();
        if (mAutoClass != null) {
            try {
                // 获取名为a的方法
                Method a = mAutoClass.getDeclaredMethod("onRun", AccessibilityEvent.class);
                //設置可訪問
                a.setAccessible(true);
                //調用a方法
                a.invoke(mAutoObj, event);
            } catch (Exception e) {
                onStop();
//                    e.printStackTrace();

            }
        }


    }

    @Override
    public void onInterrupt() {
        Toast.makeText(this, "功能被迫中断...", Toast.LENGTH_SHORT).show();

        mService = null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "功能已关闭.", Toast.LENGTH_SHORT).show();
        mService = null;
    }

    //    实现脚本的关闭
    public void onStop() {
        try {
            if (mAutoClass != null) {

                // 获取名为a的方法
                Method a = mAutoClass.getDeclaredMethod("onStop");
                //設置可訪問
                a.setAccessible(true);
                //調用a方法
                a.invoke(mAutoObj);

            }
        } catch (Exception e) {

        }
    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 公共方法
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    /**
     * 辅助功能是否启动
     */
    public static boolean isStart() {
        return mService != null;
    }


    /**
     * 脚本的开启
     *
     * @param s 要执行的基本
     * @param i 多久执行，最后面执行的覆盖前面的
     */
    public void startAuto(final String s, final int i) {

        if (s.equals("")) {
            onStop();
        }
        try {

            Thread.sleep(i);

            mAutoClass = Class.forName(s);
            // 设置访问类型
            mAutoClass.getDeclaredFields();
// 实例化对象
            mAutoObj = mAutoClass.newInstance();
//初始化
            if (mAutoClass != null) {

                // 获取名为a的方法
                Method a = mAutoClass.getDeclaredMethod("onStart");
                //設置可訪問
                a.setAccessible(true);
                //調用a方法
                a.invoke(mAutoObj);


            }


//            out.println(mClass_B.getInterfaces());


        } catch (Exception e) {

            mAutoClass = null;
        }


    }

}
